package br.com.salao.ejb.dao.impl;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.apache.log4j.Logger;

import br.com.salao.ejb.dao.UsuarioDao;
import br.com.salao.entity.Usuario;


public class UsuarioDaoImpl implements UsuarioDao {

	private Logger logger = Logger.getLogger(UsuarioDaoImpl.class.getName());
	private EntityManager em;
	private final GenericDao<Usuario> dao;

	public UsuarioDaoImpl(EntityManager em){
		this.em = em;
		dao = new GenericDao<Usuario>(em, Usuario.class);
	}

	public Usuario inserir(Usuario usuario) {
		return dao.salvar(usuario);
	}

	public List<Usuario> listar(){		
		return dao.lista();
	}		

	public Usuario update(Usuario usuario){
		return dao.update(usuario);
	}

	public int getUsuarioCount() {

		try {
			Query q = em.createQuery("select count(o) from Usuario as o");
			return ((Long) q.getSingleResult()).intValue();
		} catch (Exception e) {
			StringBuffer sb = new StringBuffer();
			sb.append(e.getMessage() + "\n");
			sb.append(e.getCause());
			logger.error(sb.toString());
			e.printStackTrace();
			return 0;
		} 
	}

	public Usuario buscarUsuarioPeloCpf(String cpf){		

		Usuario usuario = null;
		try{
			Query query = em.createQuery("from Usuario e where e.cpf =:cpf");
			query.setParameter("cpf", cpf);
			usuario = (Usuario)query.getSingleResult();
		}catch (Exception e) {

			usuario = null;
			logger.error(":: buscarUsuarioPeloCpf() :: CPF nao encontrado [" + cpf + "]" );
			logger.error(e.getCause());

		}
		return usuario; 
	}

	public Usuario buscarUsuarioPeloEmail(String email){		

		Usuario usuario = null;
		try{
			Query query = em.createQuery("from Usuario e where e.email =:email");
			query.setParameter("email", email);
			usuario = (Usuario)query.getSingleResult();
		}catch (Exception e) {
			usuario = null;
			logger.error(":: Usuario nao localizado :: Email: [" + email + "]");
			logger.error(e.getCause());
		}
		return usuario; 
	}
}